extern void abort (void);
struct example {
  volatile char f2 : 1;
  __attribute__((aligned(8))) unsigned int f5 : 16;
  volatile char f;
  __attribute__((aligned(8))) unsigned int f6 : 17;
};

struct s1 {
  int a;
  long c[];
} s1 = {1, {123,123}};

struct s2 {
  int i;
  struct example c[];
} s2 = {1,34};

struct s3 {
  int i;
  char c[];
} s3 = {1, "01234"};

struct s4 {
  int a;
  int c[];
} s4 = {1, 123};


__SIZE_TYPE__ f(void) {
  // CHECK: return (constval u64 16)
  return __builtin_object_size(&s1.c, 0);
}

__SIZE_TYPE__ k(void) {
  // CHECK: return (constval u64 4)
  return __builtin_object_size(&s4.c, 0);
}

__SIZE_TYPE__ g(void) {
  // CHECK: return (constval u64 24)
  return __builtin_object_size(&s2.c, 0);
}

__SIZE_TYPE__ h(void) {
  // CHECK: return (constval u64 6)
  return __builtin_object_size(&s3.c, 0);
}

__SIZE_TYPE__ j(void) {
  // CHECK: return (constval u64 6)
  return __builtin_object_size(&s3.c[0], 0);
}

int main() {
  return 0;
}

